//
//  HMOAuthViewController.swift
//  Weibo
//
//  Created by xiongminghua on 16/7/19.
//  Copyright © 2016年 熊明华. All rights reserved.
//

import UIKit
import SVProgressHUD

class HMOAuthViewController: UIViewController {
    
    override func loadView() {
        
        self.view = webView
        
        // 设置webView的代理
        webView.delegate = self
    }

    override func viewDidLoad() {
        super.viewDidLoad()
      
        // 设置背景颜色
        self.view.backgroundColor = UIColor.whiteColor()
        // 设置导航条
        setupNavgationBar()
        
        // 使用WebView加载授权登录界面 即从我们自己的应用跳转到新浪微博的登录界面
        // 授权请求地址：https://api.weibo.com/oauth2/authorize
        // 使用GET 请求的方式： 在地址后面?参数1=值&参数2=值&参数3=值 ，根据接口文档获取参数
        let urlSting = "https://api.weibo.com/oauth2/authorize?client_id=\(client_id)&redirect_uri=\(redirect_uri)"
        
        let url = NSURL(string: urlSting)
        let request = NSURLRequest(URL: url!)
        //使用WebView加载授权登录界面
        webView.loadRequest(request)
        
        // 显示正在加载数据 , 加载进度会一直转，只有dismis才能关闭
        SVProgressHUD.showWithStatus("正在加载...")
        // 设置时间
        SVProgressHUD.setMinimumDismissTimeInterval(2)
  
    }

    
    /// 设置导航条
    private func setupNavgationBar() {
        
        // 添加左右两边的按钮
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "填充", style: UIBarButtonItemStyle.Plain, target: self, action: "fillClick")
        
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
        
        // 设置标题
        self.navigationItem.title = "登录"
    }
    
    
    // MARK: - 点击事件
   @objc private func fillClick() {
    
    // 通过JS代码实现 JS->Swift代码的交互
    // document.getElementById('userId').value='czbkiosweibo@163.com'
    // document.getElementById('passwd').value='czbkios111'
    
    // 通过Swift代码，实现HTML(网页)界面的交互
    let jsCode = "document.getElementById('userId').value='15919949781';document.getElementById('passwd').value='XMH09021232xmh'"
    
    // JS代码 -> 转 Swift代码 的交互，
    webView.stringByEvaluatingJavaScriptFromString(jsCode)
        
    }
    
   @objc private func close() {
        
        // 关闭界面
        self.dismissViewControllerAnimated(true, completion: nil)
    }
    
    /// 懒加载WebView界面
    private lazy var webView: UIWebView = UIWebView()
    
}


/// 设置一个分类来管理代理方法
extension HMOAuthViewController: UIWebViewDelegate {
    
    // 当网页加载完成的时候调用
    func webViewDidFinishLoad(webView: UIWebView) {
        
        // 关闭加载进度
        SVProgressHUD.dismiss()
    }
    
    /// 每当WebView要去加载一个网页都会调用这个方法,询问我们是否真的要去加载, 返回: false 就不加载 返回true就去加载
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        let urlString = request.URL!.absoluteString
        print("加载的地址：\(urlString)")
        
        // 不需要拦截其他界面，只需要拦截授权回调地址--百度首页地址
        if !urlString.hasPrefix(redirect_uri) {
            
            return true
            
        }else {
            // 取消地址：http://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error
            // 授权地址：http://www.baidu.com/?code=85ceae1788634e42ffa511862e7db55e
            // 是授权回调地址,需要拦截
            // 判断是点击了取消还是授权, ？后面的称为query
            let query = request.URL!.query!
            // 判断query 后面是否以code= 开头
            let codeString = "code="
            if query.hasPrefix(codeString) {
                
                // 点击了授权, 截取code=后面的字符串
                let nsQuery = query as NSString
                let code = nsQuery.substringFromIndex(codeString.characters.count)
                
                // 发送POST请求，获取access_token
              //  self.getAccessToken(code)
                
                HMUserAccountViewModel.sharedUserAccountViewModel.getAccessToken(code, completion: { (error: NSError?) -> Void in
            
                    if error != nil {
                        
                        // 使用提示框
                        SVProgressHUD.showErrorWithStatus("加载AccessToken出错了")
                        // 延迟关闭
                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
    
                            self.close()
                        })
                    }
                    // 授权加载数据成功了，跳转到欢迎界面
                    self.close()
                    //跳转到欢迎界面
                    AppDelegate.swithRootViewController(HMWelcomeViewController())
            
               })
                
            } else {
                
                // 点击了取消,关闭
                self.close()
            }
            
            return false
        }
    }
    
//    /// 发送POST请求网络数据，获取access_token
//    private func getAccessToken(code: String) {
//        
//        let urlString = "https://api.weibo.com/oauth2/access_token"
//        
//        // 参数
//        let parameters = [
//            
//            "client_id": client_id,
//            "client_secret": client_secret,
//            "grant_type": "authorization_code",
//            "code": code,
//            "redirect_uri": redirect_uri
//        ]
//        
//        // 使用AFN发送POST请求 ， 获取access_token
//        HMAFNetworkTool.sharedAFNetwork.POST(urlString, parameters: parameters, progress: nil, success: { (_, resopnseObject) -> Void in
////            print("resopnseObject: \(resopnseObject)")
//            
//            // 字典转模型
//            let dict = resopnseObject as! [String: AnyObject]
//            let userAccount = HMUserAccount(dict: dict)
//            
//            print("userAccount: \(userAccount)")
//            
//            // 将模型数据保存到沙盒，使用归档，接档
//            
//            
//            // 从沙盒中读取模型数据
//            
//            
//            }) { (_, error) -> Void in
//                
//            print("error: \(error)")
//        }
//        
//        
//    }
  
}

